迷宫问题是一个经典的问题,当迷宫规模较大时,手工求解是十分困难的,所以用善于进行重复繁琐计算的计算机来求解便十分合适。基本思想和解决“八皇后问题” 的思想一致,都是利用回溯法。从入口开始,探索每一个迷宫中没有被墙挡住的位置,如果该位置可以移动到下一个位置,则标记该位置已被探索过并入栈;如果不能移动到下一位置,则标记为探索失败并回退到上一个位置,如果最终退回了出发点,则说明迷宫无解。下面附上代码:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define passed 2
#define failed 3
#define N 2//定义迷宫规模
#define NUM (N+2)//定义迷宫总宽度
/*迷宫中为1的地方为墙壁,0为可到达的点*/
typedef int status;
typedef int elemtype;
/*定义位置pos*/
typedef struct pos{
elemtype x;
elemtype y;
elemtype next;//当前位置的下一个位置
}pos;
typedef struct sqstack{
pos p[N*N];
int top;
}sqstack;
int maze[NUM][NUM];//定义迷宫
/*定义栈操作*/
status initstack(sqstack *S){
S->top=-1;
}
status stacklength(sqstack *S){
return S->top+1;
}
status push(sqstack *S,pos p){
S->top++;
S->p[S->top]=p;
}
status pop(sqstack *S){
S->top--;
}
status gettop(sqstack *S,pos *p){
*p=S->p[S->top];
}
status emptystack(sqstack *S){
if(S->top==-1)
return TRUE;
else
return FALSE;
}
/*其他操作*/
/******